// 对 axios 函数库进行二次封装
import axios from "axios";
import { ElMessage } from "element-plus";
// 引入相关仓库
import useUserStore from "@/store/modules/user";

// 利用 axios.create 方法创建一个实例
const request = axios.create({
    baseURL: "/api",
    timeout: 3000,
});

// 请求拦截器
request.interceptors.request.use(config => {
    // 创建userStore
    let userStore = useUserStore();
    // 如果有用户的 token ，需要在请求头携带
    if (userStore.userInfo.token) {
        config.headers.token = userStore.userInfo.token
    }
    return config;
})
// 响应拦截器
request.interceptors.response.use(response => {
    return response.data;
}, error => {
    if (error.response) {
        let status = error.response.status;
    switch (status) {
        case 401:
            // 错误提示信息
            ElMessage({
                type: "error",
                message: "请求失败：参数有误",
            })
            break;

        case 404:
            // 错误提示信息
            ElMessage({
                type: "error",
                message: "请求失败：路径出现问题",
            })
            break;

        case 500 | 501 | 502 | 503 | 504:
            // 错误提示信息
            ElMessage({
                type: "error",
                message: "请求失败：服务器找不到了",
            })
            break;

        default:
            break;
    }
    } else {
        ElMessage({
            type: "error",
            message: "服务器失踪了",
        })
    }
    return Promise.reject(new Error(error.message));
})

// 对外暴露
export default request;